package com.zmn.mcc.cas.server;

import com.zmn.mcc.model.entity.staff.McStaff;


/**
 * 员工登录白名单
 *
 * @author quanjic
 * @version v1.0
 * @since 2020/6/15 16:04
 **/
public interface WhitelistService {

    /**
     * @return 如果已启用返回<code>true</code>，否则返回<code>false</code>
     */
    boolean isEnabled();


    /**
     * 白名单检测；如果指定员工IP与城市区域代码在白名单内返回 true。
     *
     * @param loginIp     员工IP地址
     * @param loginCityId 员工城市区域代码
     * @return 如果指定员工IP与城市区域代码在白名单内返回 true
     */
    boolean inWhitelist(String loginIp, Integer loginCityId);


    /**
     * 如果指定用户是白名单用户(包含临时白名单)返回<code>true</code>；IP白名单用户则不做IP白名单过滤
     *
     * @param staff
     * @return 如果是白名单用户返回<code>true</code>
     */
    boolean isWhitelistUser(McStaff staff);


    /**
     * 如果允许员工登录，返回<code>true</code>。
     *
     * <pre>
     * <code>
     *
     * 等效于：
     *
     * String staffName = ...;
     * String ip = ...;
     * String cityId = ...;
     *
     * if(isTempWhitelist(staffName) || inWhitelist(ip, cityId)){
     *     return true;
     *  else {
     *     return false;
     * }
     *
     * </code>
     * </pre>
     *
     * @param user 员工(非<code>null</code>)
     * @param ip   ip(非空或者<code>null</code>)
     * @return 如果允许员工登录，返回<code>true</code>
     */
    boolean canLogin(McStaff user, String ip);

}
